const fp = require('lodash/fp');

const cars = [
    {name:'Ferrari FF',horsepower:660,dollar_value:70000,in_stock:true},
    {name:'Spyker C12 Zagato',horsepower:650,dollar_value:6480000,in_stock:false},
    {name:'Jaguar XKR-S',horsepower:550,dollar_value:132000,in_stock:false},
    {name:'Audi R8',horsepower:525,dollar_value:114200,in_stock:false},
    {name:'Aston Martin One-77',horsepower:750,dollar_value:1850000,in_stock:true},
    {name:'Pagani Huayra',horsepower:700,dollar_value:1300000,in_stock:false},
];

//练习1：使用组合函数flowRight实现 下面的函数
let isLastInStock = function(cars){
    let last_car = fp.last(cars);
    //获取最后一条属性
    return fp.prop('in_stock',last_car);
}

let r = fp.flowRight(fp.prop('in_stock'),fp.last);
console.log(r(cars));
console.log(isLastInStock(cars));

//练习2：使用fp.flowRight fp.prop fp.first 获取第一个car的name
let r2 = fp.flowRight(fp.prop('name'),fp.first);
console.log(r2(cars));

//练习3：使用帮助函数_average重构averageDollarValue使用函数组合的方式
let _average = function(xs){
    return fp.reduce(fp.add,0,xs) / xs.length;
}//无须改动

let averageDollarValue = function(cars){
    let dollar_value = fp.map(function(car){
        return car.dollar_value;
    },cars);
    return _average(dollar_value);
}

let r_map = function(car){
    return car.dollar_value;
}

let r_averageDollarValue = fp.flowRight(_average,fp.map(r_map));
console.log("r-:"+r_averageDollarValue(cars));
console.log("old:"+averageDollarValue(cars));

//练习4：使用flowRight 写一个返回下划线连接的小写字符串 传递数组
let _underscore = fp.replace(/\W+/g,'_');//无须改动

let sanitizeNames = fp.map(fp.flowRight(_underscore,fp.toLower));

console.log(sanitizeNames(['HELLO WORLD','I LOVE U']));

